ํต์ ๋คํธ์ํฌ ๊ด๋ฆฌ์์ ํ์ด์ฌ์ด ์ด๋ป๊ฒ ํ์ ์ ๊ฐ์ ธ์ค๋์ง ์์๋ณด์ธ์. ๋ณต์กํ ๊ธ๋ก๋ฒ ๋คํธ์ํฌ์์ ์๋ํ, ๋ชจ๋ํฐ๋ง, ๋ฐ์ดํฐ ๋ถ์์ ์ํ ํ์ด์ฌ ํ์ฉ์ ๋ํ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
ํ์ด์ฌ์ ํ์ฉํ ํ๋ ํต์ ๋คํธ์ํฌ ๊ด๋ฆฌ
์ด์ฐ๊ฒฐ๋ ๊ธ๋ก๋ฒ ๊ฒฝ์ ์์ ํต์ ๋คํธ์ํฌ๋ ํ๋ ์ฌํ์ ์ํ๊ณ์ ๊ฐ์ต๋๋ค. ์ฐ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ , ๋น์ฆ๋์ค๋ฅผ ์ฐ๊ฒฐํ๋ฉฐ, ํ์ ์ ์ง์ํฉ๋๋ค. ํ์ง๋ง ์ด ์ค์ํ ์ธํ๋ผ๋ ์ง๊ฐ๋ณ๋์ ๊ฒช๊ณ ์์ต๋๋ค. 5G์ ๋ฑ์ฅ, ์ฌ๋ฌผ ์ธํฐ๋ท(IoT)์ ํญ๋ฐ์ ์ธ ์ฆ๊ฐ, ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ํคํ ์ฒ๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ธฐ์กด์ ์๋์ ์ธ ๋คํธ์ํฌ ๊ด๋ฆฌ ๋ฐฉ์์ผ๋ก๋ ๋ ์ด์ ๊ฐ๋นํ ์ ์๋ ์์ค์ ๋ณต์ก์ฑ๊ณผ ๊ท๋ชจ๋ฅผ ์ด๋ํ์ต๋๋ค. SSH๋ฅผ ํตํด ์ฅ์น์ ์๋์ผ๋ก ๋ก๊ทธ์ธํ์ฌ ์ฅ์ ์ ๋์ํ๋ ๋ฐฉ์์ ์ด์ ๊ตฌ์๋์ ์ ๋ฌผ์ด ๋์์ต๋๋ค. ์ค๋๋ ์ ๋คํธ์ํฌ๋ ์๋ํ๋ง์ด ์ ๊ณตํ ์ ์๋ ๊ท๋ชจ์์์ ์๋, ์ง๋ฅ, ๋ณต์๋ ฅ์ ์๊ตฌํฉ๋๋ค.
ํ์ด์ฌ์ ๋ง๋๋ณด์ธ์. ํ๋ ์ฃผ๋ก ์น ๊ฐ๋ฐ๊ณผ ๋ฐ์ดํฐ ๊ณผํ์ ์ํ ์ธ์ด์๋ ํ์ด์ฌ์ด ์ ์ธ๊ณ ๋คํธ์ํฌ ์์ง๋์ด์ ํต์ ์ ๋ฌธ๊ฐ๋ค์๊ฒ ์ต๊ณ ์ ๋๊ตฌ๋ก ํ๊ณ ํ ์๋ฆฌ ์ก์์ต๋๋ค. ํ์ด์ฌ์ ๋จ์ํจ, ๊ฐ๋ ฅํจ, ๊ทธ๋ฆฌ๊ณ ์ ๋ฌธํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํ๊ณ์ ์กฐํฉ์ ํ๋ ๋คํธ์ํฌ์ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๋ ๋ฐ ์๋ฒฝํ ์ธ์ด์ ๋๋ค. ์ด ๊ฐ์ด๋๋ ์ ์ธ๊ณ๋ฅผ ์์ง์ด๋ ํต์ ๋คํธ์ํฌ๋ฅผ ์๋ํ, ๊ด๋ฆฌ, ์ต์ ํํ๊ธฐ ์ํด ํ์ด์ฌ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๊ณ ์๋์ง์ ๋ํ ํฌ๊ด์ ์ธ ํ๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ์ด์ฌ์ ์ฅ์ : ๋คํธ์ํฌ ์์ง๋์ด์๊ฒ ์ ๋ง๊ตฌ์ ํ๋์นด์ธ๊ฐ
์ด๋ก ์ ์ผ๋ก๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋คํธ์ํฌ ์์ ์ ์ํด ์ฌ์ฉ๋ ์ ์์ง๋ง, ํ์ด์ฌ์ ๋ช ๊ฐ์ง ์ค๋๋ ฅ ์๋ ์ด์ ๋ก ์ง๋ฐฐ์ ์ธ ์์น๋ฅผ ์ฐจ์งํ๊ฒ ๋์์ต๋๋ค. ํ์ด์ฌ์ ๊ธฐ์กด์ ๋คํธ์ํฌ ์์ง๋์ด๋ง๊ณผ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๊ดํ ์ฌ์ด์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๋ฉฐ, ์ข ์ข "NetDevOps"๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๋ก์ด ๋ถ์ผ๋ฅผ ์ฐฝ์ถํฉ๋๋ค.
- ๋จ์์ฑ๊ณผ ๋ฎ์ ํ์ต ๊ณก์ : ํ์ด์ฌ์ ๊ตฌ๋ฌธ์ ๋ช ํํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๊ฒ์ผ๋ก ์ ๋ช ํ๋ฉฐ, ์ผ๋ฐ ์์ด์ ์ ์ฌํฉ๋๋ค. ์ด๋ ์ปดํจํฐ ๊ณผํ ๋ฐฐ๊ฒฝ์ด ์๋ ๋คํธ์ํฌ ์ ๋ฌธ๊ฐ๋ค์๊ฒ ๋งค์ฐ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ณต์กํ ์ธ์ด ๊ตฌ๋ฌธ๊ณผ์ ์ธ์์ด ์๋๋ผ ๋ฌธ์ ํด๊ฒฐ์ ์ง์คํ ์ ์์ต๋๋ค.
- ํ๋ถํ ์ ๋ฌธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํ๊ณ: ํ์ด์ฌ ์ปค๋ฎค๋ํฐ๋ ๋คํธ์ํฌ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ์์ ๊ฐ๋ฐํ์ต๋๋ค. Netmiko, Paramiko, Nornir, Scapy์ ๊ฐ์ ๋๊ตฌ๋ SSH ์ฐ๊ฒฐ๋ถํฐ ํจํท ์กฐ์๊น์ง ๋ชจ๋ ๊ฒ์ ์ํ ๋ฏธ๋ฆฌ ๊ตฌ์ถ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์์ง๋์ด๋ค์ ๊ฐ๋ฐ ์๊ฐ์ ์์์ด ์ ์ฝํด ์ค๋๋ค.
- ๋ฒค๋ ๋ ๋ฆฝ์ ์ด๊ณ ํฌ๋ก์ค ํ๋ซํผ: ํต์ ๋คํธ์ํฌ๋ ๊ฑฐ์ ํญ์ ๋ค์ํ ๋ฒค๋(Cisco, Juniper, Arista, Nokia ๋ฑ)์ ํ๋์จ์ด๊ฐ ํผํฉ๋ ํ๊ฒฝ์ ๋๋ค. ํ์ด์ฌ๊ณผ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฒค๋ ์ค๋ฆฝ์ ์ผ๋ก ์ค๊ณ๋์ด ์์ง๋์ด๊ฐ ๋ค์ํ ์ฅ์น๋ฅผ ๊ด๋ฆฌํ ์ ์๋ ๋จ์ผ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ํ, ํ์ด์ฌ์ Windows, macOS, Linux ๋ฑ ๊ฑฐ์ ๋ชจ๋ ์ด์ ์ฒด์ ์์ ์คํ๋๋ฏ๋ก ์ด๊ธฐ์ข ๊ธฐ์ ํ๊ฒฝ์ ํ์์ ์ ๋๋ค.
- ์ํํ ํตํฉ ๋ฐ API ์นํ์ฑ: ํ๋ ๋คํธ์ํฌ ๊ด๋ฆฌ๋ ์ ์ ๋ API ์ค์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง๊ณ ์์ต๋๋ค. ํ์ด์ฌ์ HTTP ์์ฒญ์ ๋ณด๋ด๊ณ ๋คํธ์ํฌ ์ปจํธ๋กค๋ฌ, ๋ชจ๋ํฐ๋ง ์์คํ , ํด๋ผ์ฐ๋ ํ๋ซํผ๊ณผ ์ํธ ์์ฉํ๋ ํ์ค์ธ JSON ๋ฐ XML๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ์์ ํ์ฑํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์ธ๊ธฐ ์๋ requests ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ API ํตํฉ์ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ๋ง๋ญ๋๋ค.
- ํ๋ฐํ ๊ธ๋ก๋ฒ ์ปค๋ฎค๋ํฐ: ํ์ด์ฌ์ ์ธ๊ณ์์ ๊ฐ์ฅ ํฌ๊ณ ํ๋ฐํ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์ค ํ๋๋ฅผ ์๋ํฉ๋๋ค. ๋คํธ์ํฌ ์์ง๋์ด์๊ฒ ์ด๋ ์๋ง์ ํํ ๋ฆฌ์ผ, ๋ฌธ์, ํฌ๋ผ ๋ฐ ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ค ์ด๋ ค์์ ์ง๋ฉดํ๋ , ๊ธ๋ก๋ฒ ์ปค๋ฎค๋ํฐ์ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ฏธ ํด๊ฒฐ์ฑ ์ ๊ณต์ ํ์ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ๋์ต๋๋ค.
ํ ๋ ์ฝค ๋คํธ์ํฌ ์ด์์์ ํ์ด์ฌ์ ํต์ฌ ๊ธฐ๋ฅ
ํต์ ๋คํธ์ํฌ ๊ด๋ฆฌ์์ ํ์ด์ฌ์ ์ ์ฉ์ ๋จ์ผํ ๊ฐ๋ ์ด ์๋๋๋ค. ์ด๋ ๋คํธ์ํฌ ์ด์์ ์ ์ฒด ๋ผ์ดํ์ฌ์ดํด์ ๊ฑธ์ณ ์ ์ฉ๋ ์ ์๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค์ ์งํฉ์ ๋๋ค. ํ์ด์ฌ์ด ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๊ณ ์๋ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ๋ฅ 1: ๋คํธ์ํฌ ์๋ํ ๋ฐ ๊ตฌ์ฑ ๊ด๋ฆฌ
์ด๊ฒ์ ๋คํธ์ํฌ ์์ง๋์ด๋ค์ด ํ์ด์ฌ์ ์ธ๊ณ๋ก ์ง์ ํ๋ ์ฒซ ๋ฒ์งธ ๊ด๋ฌธ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ค์์น ๊ตฌ์ฑ, ๋ผ์ฐํฐ ACL ์ ๋ฐ์ดํธ, ์ฅ์น ๊ตฌ์ฑ ๋ฐฑ์ ๊ณผ ๊ฐ์ ์ผ์์ ์ธ ์์ ์ ๋ฐ๋ณต์ ์ด๊ณ ์๊ฐ์ด ๋ง์ด ์์๋๋ฉฐ ์ธ๊ฐ์ ์ค๋ฅ์ ์ทจ์ฝํฉ๋๋ค. ๋จ ํ ๋ฒ์ ์๋ชป๋ ๋ช ๋ น ์ ๋ ฅ์ด ์๋นํ ์ฌ์ ์ , ํํ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ๋ ๋คํธ์ํฌ ์ฅ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
ํ์ด์ฌ ์๋ํ๋ ์ด๋ฌํ ์์ ์ ์๋์ ์ธ ์ก๋ฌด์์ ์ ๋ขฐํ ์ ์๊ณ , ๋ฐ๋ณต ๊ฐ๋ฅํ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ ํ๋ก์ธ์ค๋ก ๋ณํ์ํต๋๋ค. ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ํ์คํ๋ ๊ตฌ์ฑ์ ์์ฒ ๊ฐ์ ์ฅ์น์ ํธ์ํ๊ณ , ๋ณ๊ฒฝ ์ ํ ๊ฒ์ฆ์ ์ํํ๋ฉฐ, ์ง์ ์ ์ธ ์ธ๊ฐ์ ๊ฐ์ ์์ด ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ์ ์์ฝํ ์ ์์ต๋๋ค.
์๋ํ๋ฅผ ์ํ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
- Paramiko: SSHv2 ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ ํ์ด์ฌ ๊ตฌํ์ ๋๋ค. SSH ์ฐ๊ฒฐ์ ๋ํ ์ ์์ค ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ ์ง์ ์ ์ธ ๋ช ๋ น ์คํ ๋ฐ ํ์ผ ์ ์ก(SFTP)์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๊ฐ๋ ฅํ์ง๋ง, ๊ณ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๋ ์ฅํฉํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- Netmiko: Paramiko๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ Netmiko๋ ๋ค์ค ๋ฒค๋ ๋คํธ์ํฌ ์๋ํ์ ๊ฒ์ ์ฒด์ธ์ ์ ๋๋ค. ๋ค์ํ ๋ฒค๋์ ๋ช ๋ น์ค ์ธํฐํ์ด์ค(CLI)์ ๋ณต์ก์ฑ์ ์ถ์ํํฉ๋๋ค. Netmiko๋ ๋ค์ํ ํ๋กฌํํธ ์ ํ, ํ์ด์ง ๋งค๊น, ๋ช ๋ น ๊ตฌ๋ฌธ์ ์ง๋ฅ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ Cisco IOS ์ฅ์น, Juniper JUNOS ์ฅ์น ๋๋ Arista EOS ์ฅ์น์ `show ip interface brief`์ ๊ฐ์ ๋ช ๋ น์ ๋ณด๋ด๋ ๋ฐ ๋์ผํ ํ์ด์ฌ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- Nornir: ์๋ํ ์๊ตฌ ์ฌํญ์ด ๋ช ๊ฐ์ ์ฅ์น์์ ์๋ฐฑ ๋๋ ์์ฒ ๊ฐ๋ก ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์์ ์ ์์ฐจ์ ์ผ๋ก ์คํํ๋ ๊ฒ์ ๋นํจ์จ์ ์ ๋๋ค. Nornir๋ ์ธ๋ฒคํ ๋ฆฌ(์ฅ์น ๋ชฉ๋ก ๋ฐ ๊ด๋ จ ๋ฐ์ดํฐ)๋ฅผ ๊ด๋ฆฌํ๊ณ ์ค๋ ๋ ํ์ ์ฌ์ฉํ์ฌ ์์ ์ ๋ณ๋ ฌ๋ก ์คํํ๋ ๋ฐ ๋ฐ์ด๋ ํ๋ฌ๊ทธํ ์๋ํ ํ๋ ์์ํฌ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋๊ท๋ชจ ๋คํธ์ํฌ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ ์ ์์ต๋๋ค.
- NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support): NAPALM์ ์ถ์ํ๋ฅผ ํ ๋จ๊ณ ๋ ๋์๊ฐ๋๋ค. ๋จ์ํ ๋ช ๋ น์ ๋ณด๋ด๋ ๋์ , ๋คํธ์ํฌ ์ฅ์น์์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ธฐ ์ํ ํ์คํ๋ ํจ์(getter) ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, `get_facts()` ๋๋ `get_interfaces()`๋ฅผ ์ฌ์ฉํ๋ฉด NAPALM์ด ํด๋น ๋จ์ผ ๋ช ๋ น์ ์ ์ ํ ๋ฒค๋๋ณ CLI ๋ช ๋ น์ผ๋ก ๋ณํํ๊ณ , ์ถ๋ ฅ์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ฉฐ, ๊นจ๋ํ๊ณ ํ์คํ๋ JSON ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
๊ธฐ๋ฅ 2: ์ฌ์ ์๋ฐฉ์ ๋คํธ์ํฌ ๋ชจ๋ํฐ๋ง ๋ฐ ์ฑ๋ฅ ๋ถ์
์ ํต์ ์ธ ๋ชจ๋ํฐ๋ง์ ์ข ์ข ์ด๋ฏธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ ๋ํ๋ด๋ ๊ฒฝ๊ณ ๊ฐ ์ธ๋ฆด ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ํ๋ ๋คํธ์ํฌ ์ด์์ ์๋น์ค์ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ ์ ์ถ์ธ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ณด๋ค ์ฌ์ ์๋ฐฉ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋ชฉํ๋ก ํฉ๋๋ค. ํ์ด์ฌ์ ์ฌ์ฉ์ ์ ์ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์ ์๋ฃจ์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์ํ ๋๊ตฌ์ ๋๋ค.
๋๊ตฌ ๋ฐ ๊ธฐ๋ฒ:
- `pysnmp`๋ฅผ ์ฌ์ฉํ SNMP: Simple Network Management Protocol(SNMP)์ ๋คํธ์ํฌ ์ฅ์น์์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ธฐ ์ํ ์ค๋ ์ฐ์ ํ์ค์ ๋๋ค. `pysnmp`์ ๊ฐ์ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ธํฐํ์ด์ค ๋์ญํญ, ์ค๋ฅ ์์ ๊ฐ์ ํต์ฌ ์ฑ๋ฅ ์งํ(KPI)๋ฅผ ์ํด ์ฅ์น๋ฅผ ํด๋งํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ ์ถ์ธ ๋ถ์์ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ์ ์์ต๋๋ค.
- ์คํธ๋ฆฌ๋ฐ ํ ๋ ๋ฉํธ๋ฆฌ: ํ๋์ ์ด๊ณ ๊ณ ์ฑ๋ฅ์ ๋คํธ์ํฌ(ํนํ 5G ๋ฐ ๋ฐ์ดํฐ ์ผํฐ ํ๊ฒฝ)์ ๊ฒฝ์ฐ, SNMP์ ๊ฐ์ ํด๋ง ๊ธฐ๋ฐ ๋ชจ๋ํฐ๋ง์ ๋๋ฌด ๋๋ฆด ์ ์์ต๋๋ค. ์คํธ๋ฆฌ๋ฐ ํ ๋ ๋ฉํธ๋ฆฌ๋ ์ฅ์น๊ฐ ๊ฑฐ์ ์ค์๊ฐ์ผ๋ก ์์ง๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ง์์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐํ๋ ์๋ก์ด ํจ๋ฌ๋ค์์ ๋๋ค. ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ ์ด๋ฌํ ์์ง๊ธฐ ์ญํ ์ ํ์ฌ gNMI(gRPC Network Management Interface)์ ๊ฐ์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๊ตฌ๋ ํ๊ณ ์ฆ๊ฐ์ ์ธ ๋ถ์ ๋ฐ ๊ฒฝ๊ณ ๋ฅผ ์ํด ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- Pandas, Matplotlib, Seaborn์ ์ฌ์ฉํ ๋ฐ์ดํฐ ๋ถ์: ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ฒ์ด ์ ๋ฐ์ ์ผ์ ๋๋ค. ์ง์ ํ ๊ฐ์น๋ ๋ถ์์ ์์ต๋๋ค. ํ์ด์ฌ์ ๋ฐ์ดํฐ ๊ณผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋นํ ๋ฐ ์์ต๋๋ค. Pandas๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋ฐ์ดํฐ(CSV ํ์ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ API ํธ์ถ์์)๋ฅผ ๊ฐ๋ ฅํ DataFrame ๊ตฌ์กฐ๋ก ๋ก๋ํ์ฌ ์ ๋ฆฌ, ํํฐ๋ง ๋ฐ ์ง๊ณํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ Matplotlib๊ณผ Seaborn์ ์ฌ์ฉํ์ฌ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ์๊ฐํ ์๋ฃ(์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ๋์ญํญ ์ฌ์ฉ๋์ ๋ณด์ฌ์ฃผ๋ ์ ์ฐจํธ, ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ ํํธ๋งต ๋๋ ์ฅ์น ์ค๋ฅ์จ์ ๋ง๋ ์ฐจํธ)๋ฅผ ๋ง๋ค์ด ์์ ์ซ์๋ฅผ ์คํ ๊ฐ๋ฅํ ์ ๋ณด๋ก ๋ณํํ ์ ์์ต๋๋ค.
๊ธฐ๋ฅ 3: ๊ฐ์ํ๋ ๋ฌธ์ ํด๊ฒฐ ๋ฐ ์ง๋จ
๋คํธ์ํฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋, ์ฃผ์ ๋ชฉํ๋ ํ๊ท ์ฅ์ ํด๊ฒฐ ์๊ฐ(MTTR)์ ์ค์ด๋ ๊ฒ์ ๋๋ค. ๋ฌธ์ ํด๊ฒฐ์ ์ข ์ข ๋ฐ๋ณต์ ์ธ ์ง๋จ ๋จ๊ณ์ ๊ธด๊ธํ ์ํ์ค๋ฅผ ํฌํจํฉ๋๋ค. ์ฌ๋ฌ ์ฅ์น์ ๋ก๊ทธ์ธํ๊ณ ์ผ๋ จ์ `show` ๋ฐ `ping` ๋ช ๋ น์ ์คํํ๊ณ ์ถ๋ ฅ์ ์๊ด์ํค๋ ค๊ณ ํฉ๋๋ค. ํ์ด์ฌ์ ์ด ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ์ ์์ต๋๋ค.
ํ์ด์ฌ์ ์ง๋จ ํดํท:
- ํจํท ์์ฑ์ ์ํ Scapy: ์ฌ์ธต์ ์ด๊ณ ์ ์์ค์ ๋ฌธ์ ํด๊ฒฐ์ ์ํด์๋ ping ๋ฐ traceroute์ ๊ฐ์ ํ์ค ๋๊ตฌ๋ฅผ ๋์ด์์ผ ํ ๋๊ฐ ์์ต๋๋ค. Scapy๋ ํ์ด์ฌ ๊ธฐ๋ฐ์ ๊ฐ๋ ฅํ ํจํท ์กฐ์ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฒ์๋ถํฐ ์ฌ์ฉ์ ์ ์ ๋คํธ์ํฌ ํจํท์ ๋ง๋ค๊ณ , ์์ด์ด์ ๋ณด๋ด๊ณ , ์๋ต์ ๋ถ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐฉํ๋ฒฝ ๊ท์น ํ ์คํธ, ํ๋กํ ์ฝ ๋ฌธ์ ์ง๋จ ๋๋ ๋คํธ์ํฌ ๊ฒ์ ์์ ์ ์ํํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- ์๋ํ๋ ๋ก๊ทธ ๋ถ์: ๋คํธ์ํฌ ์ฅ์น๋ ๋ฐฉ๋ํ ์์ syslog ๋ฉ์์ง๋ฅผ ์์ฑํฉ๋๋ค. ์์ฒ ์ค์ ๋ก๊ทธ ํ์ผ์ ์๋์ผ๋ก ๊ฒ์ํ๋ ๊ฒ์ ๋นํจ์จ์ ์ ๋๋ค. ํ์ด์ฌ์ ์ฌ์ฉํ๋ฉด ์ค์ ์๋ฒ์์ ๋ก๊ทธ๋ฅผ ๊ฐ์ ธ์ค๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ , ๋ด์ฅ ์ ๊ท ํํ์ ๋ชจ๋(`re`)์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ฌธ ๋ถ์ํ๋ฉฐ, ์ค์ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์๋์ผ๋ก ํ๋๊ทธ ์ง์ ํ๊ณ , ํจํด(์: ํ๋ํํ๋ ์ธํฐํ์ด์ค)์ ์๋ณํ๊ฑฐ๋ ํน์ ์ด๋ฒคํธ ๋ฐ์ ํ์๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- `requests`๋ฅผ ์ฌ์ฉํ API ๊ธฐ๋ฐ ์ง๋จ: ๋ง์ ํ๋ ๋คํธ์ํฌ ํ๋ซํผ ๋ฐ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ REST API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ ธ์ถํฉ๋๋ค. ํ์ด์ฌ `requests` ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ API๋ฅผ ์ฟผ๋ฆฌํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋จ์ผ ์คํฌ๋ฆฝํธ๋ Cisco DNA Center์์ ์ฅ์น ์ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ , SolarWinds ์ธ์คํด์ค์์ ๊ฒฝ๊ณ ๋ฅผ ํ์ธํ๋ฉฐ, NetFlow ์์ง๊ธฐ๋ฅผ ์ฟผ๋ฆฌํ์ฌ ์์ ํธ๋ํฝ ์์ค๋ฅผ ์๋ณํ์ฌ ๋ชจ๋ ์ด๊ธฐ ์ง๋จ ๋ฐ์ดํฐ๋ฅผ ๋ช ์ด ๋ง์ ํตํฉํ ์ ์์ต๋๋ค.
๊ธฐ๋ฅ 4: ๋ณด์ ๊ฐํ ๋ฐ ๊ท์ ์ค์ ๊ฐ์ฌ
์์ ํ๊ณ ๊ท์ ์ ์ค์ํ๋ ๋คํธ์ํฌ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ ํ์ ๋ถ๊ฐ๋ฅํ ์๊ตฌ ์ฌํญ์ ๋๋ค. ๋ณด์ ์ ์ฑ ๋ฐ ์ฐ์ ๊ท์ ์ ํน์ ๊ตฌ์ฑ, ์ก์ธ์ค ์ ์ด ๋ชฉ๋ก(ACL) ๋ฐ ์ํํธ์จ์ด ๋ฒ์ ์ ์๋ฌดํํฉ๋๋ค. ์๋ฐฑ ๋๋ ์์ฒ ๊ฐ์ ์ฅ์น๋ฅผ ์๋์ผ๋ก ๊ฐ์ฌํ์ฌ ์ด๋ฌํ ํ์ค์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ ๊ฒ์ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ ์ง์น์ง ์๋ ๊ฐ์ฌ์ ์ญํ ์ ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์ํฌํ๋ก๋ ์ฃผ๊ธฐ์ ์ผ๋ก ๋คํธ์ํฌ์ ๋ชจ๋ ์ฅ์น์ ๋ก๊ทธ์ธํ๊ณ , ์คํ ๊ตฌ์ฑ์ ๊ฒ์ํ๊ณ , ์น์ธ๋ "๊ณจ๋ ํ ํ๋ฆฟ"๊ณผ ๋น๊ตํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ํ์ด์ฌ์ `difflib` ๋ชจ๋์ ์ฌ์ฉํ์ฌ, ์คํฌ๋ฆฝํธ๋ ๋ฌด๋จ ๋ณ๊ฒฝ ์ฌํญ์ ์ ํํ ์ฐพ์๋ด๊ณ ๊ฒฝ๊ณ ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋์ผํ ์๋ฆฌ๋ ๋ฐฉํ๋ฒฝ ๊ท์น์ ๊ฐ์ฌํ๊ณ , ์ฝํ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ๊ฑฐ๋, ๋ชจ๋ ์ฅ์น๊ฐ ํจ์น๋๊ณ ์น์ธ๋ ์ํํธ์จ์ด ๋ฒ์ ์ ์คํํ๋์ง ํ์ธํ๋ ๋ฐ ์ ์ฉ๋ ์ ์์ต๋๋ค.
์ฐจ์ธ๋ ๋คํธ์ํน ํจ๋ฌ๋ค์์์ ํ์ด์ฌ์ ์ญํ
๊ธฐ์กด ๋คํธ์ํฌ ๊ด๋ฆฌ ์ธ์๋ ํ์ด์ฌ์ ์ ๊ณ์ ๊ฐ์ฅ ์ค์ํ ์ํคํ ์ฒ ๋ณํ์ ์ค์ฌ์ ์์ต๋๋ค. ์ด๋ ์ด๋ฌํ ์๋ก์ด ํจ๋ฌ๋ค์์์ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ์ฑ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ค์ํ ์ฐ๊ฒฐ ๊ณ ๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์ํํธ์จ์ด ์ ์ ๋คํธ์ํน(SDN)
SDN์ ๋คํธ์ํฌ์ ์ ์ด ํ๋ ์ธ("๋๋")๊ณผ ๋ฐ์ดํฐ ํ๋ ์ธ(ํธ๋ํฝ์ ์ ๋ฌํ๋ ํ๋์จ์ด)์ ๋ถ๋ฆฌํฉ๋๋ค. ์ด ๋ ผ๋ฆฌ๋ ์ํํธ์จ์ด ๊ธฐ๋ฐ SDN ์ปจํธ๋กค๋ฌ์ ์ค์ ์ง์คํ๋ฉ๋๋ค. ์ด ์ปจํธ๋กค๋ฌ์ ์ํธ ์์ฉํ์ฌ ๋คํธ์ํฌ ๋์์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ์ฃผ๋ก API๋ฅผ ํตํด REST API์ ๋ํ ํ๋ฅญํ ์ง์์ ๊ฐ์ถ ํ์ด์ฌ์ SDN ์ปจํธ๋กค๋ฌ์๊ฒ ํธ๋ํฝ ํ๋ฆ์ ๊ด๋ฆฌํ๊ณ , ์๋น์ค๋ฅผ ํ๋ก๋น์ ๋ํ๋ฉฐ, ๋คํธ์ํฌ ์ด๋ฒคํธ์ ์๋ตํ๋ ๋ฐฉ๋ฒ์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ง์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ์ฌ์ค์์ ์ธ์ด๊ฐ ๋์์ต๋๋ค.
๋คํธ์ํฌ ๊ธฐ๋ฅ ๊ฐ์ํ(NFV)
NFV๋ ๋ฐฉํ๋ฒฝ, ๋ก๋ ๋ฐธ๋ฐ์, ๋ผ์ฐํฐ์ ๊ฐ์ด ์ ํต์ ์ผ๋ก ์ ์ฉ ํ๋์จ์ด ์ฅ์น์์ ์คํ๋๋ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ๊ฐ์ํํ๊ณ , ์ด๋ฅผ ํ์ค ์์ฉ ์๋ฒ์์ ์ํํธ์จ์ด(๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฅ ๋๋ VNF)๋ก ์คํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ํ์ด์ฌ์ NFV ์ค์ผ์คํธ๋ ์ดํฐ์์ ์ด๋ฌํ VNF์ ์ ์ฒด ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ์ฆ, VNF๋ฅผ ๋ฐฐํฌํ๊ณ , ์์์ ๋ฐ๋ผ ํ์ฅํ๊ฑฐ๋ ์ถ์ํ๋ฉฐ, ๋ณต์กํ ์๋น์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด ํจ๊ป ์ฐ๊ฒฐํฉ๋๋ค.
์๋ ๊ธฐ๋ฐ ๋คํธ์ํน(IBN)
IBN์ ๊ด๋ฆฌ์๊ฐ ์ํ๋ ๋น์ฆ๋์ค ๊ฒฐ๊ณผ(์: "๊ฐ๋ฐ ๋ถ์์ ๋ชจ๋ ํธ๋ํฝ์ ํ๋ก๋์ ์๋ฒ๋ก๋ถํฐ ๊ฒฉ๋ฆฌ")์ธ "์๋"๋ฅผ ์ ์ํ ์ ์๋๋ก ํ๋ ๋ณด๋ค ๋ฐ์ ๋ ๊ฐ๋ ์ด๋ฉฐ, IBN ์์คํ ์ ํด๋น ์๋๋ฅผ ํ์ํ ๋คํธ์ํฌ ๊ตฌ์ฑ ๋ฐ ์ ์ฑ ์ผ๋ก ์๋ ๋ณํํฉ๋๋ค. ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ ์ข ์ข ์ด๋ฌํ ์์คํ ์์ "์ ์ฐฉ์ " ์ญํ ์ ํ๋ฉฐ, ์๋๋ฅผ ์ ์ํ๊ณ , IBN ์ปจํธ๋กค๋ฌ๋ก ํธ์ํ๋ฉฐ, ๋คํธ์ํฌ๊ฐ ์ํ๋ ์ํ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋์ง ๊ฒ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
ํ์ด์ฌ ๋คํธ์ํฌ ์๋ํ๋ฅผ ์ํ ์ค์ฉ์ ์ธ ๋ก๋๋งต
์์ํ๋ ๊ฒ์ ์ด๋ ค์ ๋ณด์ผ ์ ์์ง๋ง, ๊ตฌ์กฐํ๋ ์ ๊ทผ ๋ฐฉ์์ ํตํด ์ด ์ฌ์ ์ ๊ด๋ฆฌ ๊ฐ๋ฅํฉ๋๋ค. ํ์ด์ฌ ์๋ํ๋ฅผ ์์ฉํ๋ ค๋ ๋คํธ์ํฌ ์ ๋ฌธ๊ฐ๋ฅผ ์ํ ์ค์ฉ์ ์ธ ๋ก๋๋งต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๋จ๊ณ: ๊ธฐ๋ณธ ์ง์ ๋ฐ ํ๊ฒฝ ์ค์
- ํ์ด์ฌ ๊ธฐ๋ณธ ์ฌํญ ํ์ต: ์ํํธ์จ์ด ๊ฐ๋ฐ์๊ฐ ๋ ํ์๋ ์์ง๋ง, ๋ณ์, ๋ฐ์ดํฐ ์ ํ(๋ฌธ์์ด, ์ ์, ๋ชฉ๋ก, ์ฌ์ ), ๋ฃจํ, ์กฐ๊ฑด๋ฌธ(`if`/`else`), ํจ์์ ๊ฐ์ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํดํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํ ๊ณ ํ์ง ๋ฌด๋ฃ ๋ฆฌ์์ค๊ฐ ์จ๋ผ์ธ์ ์์์ด ๋ง์ต๋๋ค.
- ๋คํธ์ํน ๊ธฐ๋ณธ ์ฌํญ ๊ฐํ: ์๋ํ๋ ๊ธฐ์กด ์ง์์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ฉ๋๋ค. TCP/IP ์ค์ํธ, OSI ๋ชจ๋ธ, IP ์ฃผ์ ์ง์ , ํต์ฌ ๋ผ์ฐํ ๋ฐ ์ค์์นญ ํ๋กํ ์ฝ์ ๋ํ ๊ฐ๋ ฅํ ์ดํด๊ฐ ํ์์ ์ ๋๋ค.
- ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ : ์์คํ ์ ํ์ด์ฌ์ ์ค์นํ์ญ์์ค. ํ๋ฅญํ ํ์ด์ฌ ์ง์์ ์ ๊ณตํ๋ Visual Studio Code์ ๊ฐ์ ์ต์ ์ฝ๋ ํธ์ง๊ธฐ๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ค์ํ๊ฒ๋, ํ์ด์ฌ์ ๊ฐ์ ํ๊ฒฝ(`venv`)์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ญ์์ค. ์ด๋ฅผ ํตํด ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ข ์์ฑ์ด ์๋ ๊ฒฉ๋ฆฌ๋ ํ๋ก์ ํธ ํ๊ฒฝ์ ๋ง๋ค ์ ์์ด ์ถฉ๋์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น: ๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ๋๋ฉด ํ์ด์ฌ ํจํค์ง ์ค์น ํ๋ก๊ทธ๋จ์ธ `pip`๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ์ญ์์ค: `pip install netmiko nornir napalm pandas`.
2๋จ๊ณ: ์ฒซ ์๋ํ ์คํฌ๋ฆฝํธ - ์ํฌ์ค๋ฃจ
์ฌ๋ฌ ๋คํธ์ํฌ ์ฅ์น์ ๊ตฌ์ฑ์ ๋ฐฑ์ ํ๋ ๊ฐ๋จํ์ง๋ง ๋งค์ฐ ์ค์ฉ์ ์ธ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๋จ์ผ ์คํฌ๋ฆฝํธ๋ ๋ช ์๊ฐ์ ์๋ ์์ ์ ์ ์ฝํ๊ณ ์ค์ํ ์์ ๋ง์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์๋๋ฆฌ์ค: ์ธ ๊ฐ์ ๋ผ์ฐํฐ๊ฐ ์๊ณ , ๊ฐ ๋ผ์ฐํฐ์ ์ฐ๊ฒฐํ์ฌ ์คํ ์ค์ธ ๊ตฌ์ฑ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๋ น์ ์คํํ ๋ค์, ๊ฐ ์ฅ์น์ ๋ํด ๋ณ๋์ ํ ์คํธ ํ์ผ์ ํด๋น ์ถ๋ ฅ์ ์ ์ฅํ๊ณ ์ฝ๊ฒ ์ฐธ์กฐํ ์ ์๋๋ก ํ์์คํฌํ๋ฅผ ์ฐ๊ณ ์ถ์ต๋๋ค.
Netmiko๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ฌ ์ฝ๋์ ๊ฐ๋ ์ ์ธ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ธ์ค๊ธฐ
from netmiko import ConnectHandler
from datetime import datetime
import getpass
# ์ฐ๊ฒฐํ ์ฅ์น ์ ์
device1 = {
'device_type': 'cisco_ios',
'host': '192.168.1.1',
'username': 'admin',
'password': getpass.getpass(), # ๋น๋ฐ๋ฒํธ๋ฅผ ์์ ํ๊ฒ ํ๋กฌํํธ
}
device2 = {
'device_type': 'cisco_ios',
'host': '192.168.1.2',
'username': 'admin',
'password': device1['password'], # ๋์ผํ ๋น๋ฐ๋ฒํธ ์ฌ์ฌ์ฉ
}
all_devices = [device1, device2]
# ํ์ผ ์ด๋ฆ์ ์ํ ํ์ฌ ํ์์คํฌํ ๊ฐ์ ธ์ค๊ธฐ
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
# ๋ชฉ๋ก์ ๊ฐ ์ฅ์น๋ฅผ ๋ฐ๋ณต
for device in all_devices:
try:
print(f'--- {device["host"]}์ ์ฐ๊ฒฐ ์ค ---')
net_connect = ConnectHandler(**device)
# ์ฅ์น์ ํธ์คํธ ์ด๋ฆ์ ํ์ผ ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
hostname = net_connect.find_prompt().replace('#', '')
# ์คํ ์ค์ธ ๊ตฌ์ฑ์ ๋ณด์ฌ์ฃผ๋ ๋ช
๋ น ์คํ
output = net_connect.send_command('show running-config')
# ์ฅ์น์์ ์ฐ๊ฒฐ ํด์
net_connect.disconnect()
# ํ์ผ ์ด๋ฆ ๊ตฌ์ฑ ๋ฐ ์ถ๋ ฅ ์ ์ฅ
filename = f'{hostname}_{timestamp}.txt'
with open(filename, 'w') as f:
f.write(output)
print(f'+++ {hostname}์ ๋ํ ๋ฐฑ์
์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค! +++\n')
except Exception as e:
print(f'!!! {device["host"]}์ ์ฐ๊ฒฐํ์ง ๋ชปํ์ต๋๋ค: {e} !!!\n')
3๋จ๊ณ: ์ ๋ฌธ์ ์ธ ๋ชจ๋ฒ ์ฌ๋ก ์ฑํ
๊ฐ๋จํ ์คํฌ๋ฆฝํธ์์ ๋ ๋ณต์กํ ์๋ํ ์ํฌํ๋ก๋ก ์ด๋ํจ์ ๋ฐ๋ผ, ๊ฒฌ๊ณ ํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ฉฐ ์์ ํ ์๋ฃจ์ ์ ๋ง๋ค๊ธฐ ์ํด ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- Git์ ์ฌ์ฉํ ๋ฒ์ ์ ์ด: ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ๋๋ก ์ทจ๊ธํ์ญ์์ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๊ณ , ํ์๊ณผ ํ๋ ฅํ๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑํ๊ธฐ ์ํด Git์ ์ฌ์ฉํ์ญ์์ค. GitHub ๋ฐ GitLab๊ณผ ๊ฐ์ ํ๋ซํผ์ ํ๋ NetDevOps๋ฅผ ์ํ ํ์ ๋๊ตฌ์ ๋๋ค.
- ์์ ํ ์๊ฒฉ ์ฆ๋ช ๊ด๋ฆฌ: ์คํฌ๋ฆฝํธ์ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ํ๋์ฝ๋ฉํ์ง ๋ง์ญ์์ค. ์์ ์์์ ๊ฐ์ด `getpass` ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๋ฐํ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ๋กฌํํธํ์ญ์์ค. ๋ ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ, ํ๊ฒฝ ๋ณ์์์ ์๊ฒฉ ์ฆ๋ช ์ ๊ฒ์ํ๊ฑฐ๋, ๋ ๋์๊ฐ HashiCorp Vault ๋๋ AWS Secrets Manager์ ๊ฐ์ ์ ์ฉ ๋น๋ฐ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ๊ตฌ์กฐํ๋๊ณ ๋ชจ๋ํ๋ ์ฝ๋: ๊ฑฐ๋ํ ์คํฌ๋ฆฝํธ ํ๋๋ฅผ ์์ฑํ์ง ๋ง์ญ์์ค. ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์๋ก ๋ถํ ํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ์ฅ์น์ ์ฐ๊ฒฐํ๋ ํจ์, ๊ตฌ์ฑ์ ๊ฐ์ ธ์ค๋ ํจ์, ํ์ผ์ ์ ์ฅํ๋ ํจ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ๋ ๊นจ๋ํ๊ณ , ํ ์คํธํ๊ธฐ ์ฝ๊ณ , ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ: ๋คํธ์ํฌ๋ ์ ๋ขฐํ ์ ์์ต๋๋ค. ์ฐ๊ฒฐ์ด ๋์ด์ง๊ฑฐ๋, ์ฅ์น์ ์ก์ธ์คํ ์ ์๊ฑฐ๋, ๋ช ๋ น์ด ์คํจํ ์ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ๊ฐ ์ถฉ๋ํ์ง ์๋๋ก `try...except` ๋ธ๋ก์ผ๋ก ์ฝ๋๋ฅผ ๊ฐ์ธ์ ์ด๋ฌํ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ์ญ์์ค.
- ํฌ๊ด์ ์ธ ๋ก๊น : `print()` ๋ฌธ์ ๋๋ฒ๊น ์ ์ ์ฉํ์ง๋ง, ์ ์ ํ ๋ก๊น ์ ๋์ฒดํ ์๋ ์์ต๋๋ค. ํ์ด์ฌ์ ๋ด์ฅ `logging` ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ ์คํ์ ๋ํ ์ ๋ณด(ํ์์คํฌํ, ์ฌ๊ฐ๋ ์์ค(INFO, WARNING, ERROR) ๋ฐ ์์ธ ์ค๋ฅ ๋ฉ์์ง ํฌํจ)๋ฅผ ๊ธฐ๋กํ์ญ์์ค. ์ด๋ ์๋ํ ๋ฌธ์ ํด๊ฒฐ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋ฏธ๋๋ ์๋ํ๋์ด ์์ต๋๋ค: ํ์ด์ฌ, AI, ๊ทธ๋ฆฌ๊ณ ํต์ ์ ๋ฏธ๋
ํต์ ๋ถ์ผ์์ ํ์ด์ฌ์ ์ฌ์ฉํ ์ฌ์ ์ ์์ง ๋๋์ง ์์์ต๋๋ค. ๋คํธ์ํฌ ์๋ํ์ ์ธ๊ณต ์ง๋ฅ(AI) ๋ฐ ๋จธ์ ๋ฌ๋(ML)์ ๊ต์ฐจ์ ์ ์ฐจ์ธ๋ ํ์ ์ ์ด์ด์ค ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
- AIOps (IT ์ด์์ ์ํ AI): ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ก ์์ง๋ ๋ฐฉ๋ํ ์์ ๋คํธ์ํฌ ๋ฐ์ดํฐ๋ฅผ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ(Scikit-learn ๋ฐ TensorFlow์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ)์ ๊ณต๊ธํจ์ผ๋ก์จ, ์กฐ์ง์ ์ฌ์ ์๋ฐฉ์ ๋ชจ๋ํฐ๋ง์ ๋์ด ์์ธก ๋ถ์์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ธ์ ๋คํธ์ํฌ์ ์ ์์ ์ธ ๋์์ ํ์ตํ๊ณ ๋ฏธ๋์ ํผ์ก์ ์์ธกํ๋ฉฐ, ํ๋์จ์ด ์ฅ์ ๋ฅผ ์์ธกํ๊ณ , ์ฌ๋์ด ๋์น ์ ์๋ ๋ฏธ๋ฌํ ๋ณด์ ์ด์์ ์๋์ผ๋ก ํ์งํ ์ ์์ต๋๋ค.
- ๋ซํ ๋ฃจํ ์๋ํ: ์ด๊ฒ์ ๋คํธ์ํฌ ์๋ํ์ ์ฑ๋ฐฐ์ ๋๋ค. ์ด๋ ํ์ด์ฌ ์คํฌ๋ฆฝํธ๊ฐ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ๋ฟ๋ง ์๋๋ผ(์: ์ค์ํ ๋งํฌ์ ๋์ ์ง์ฐ ์๊ฐ), ์ฌ์ ์ ์๋ ์ ์ฑ ์ ๋ฐ๋ผ ์์ ์กฐ์น๋ฅผ ์๋์ผ๋ก ํธ๋ฆฌ๊ฑฐํ๋(์: ํธ๋ํฝ์ ๋ณด์กฐ ๊ฒฝ๋ก๋ก ์ฌ๋ผ์ฐํ ) ์์คํ ์ ์ค๋ช ํฉ๋๋ค. ์์คํ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ์ธ๊ฐ์ ๊ฐ์ ์์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋์ง ํ์ธํฉ๋๋ค.
- 5G ๋ฐ ์ฃ์ง ์ค์ผ์คํธ๋ ์ด์ : 5G ๋คํธ์ํฌ์ ๊ท๋ชจ์ ๋ณต์ก์ฑ, ๋ถ์ฐ๋ ์ํคํ ์ฒ ๋ฐ ์๋ฐฑ๋ง ๊ฐ์ ์ฃ์ง ์ปดํจํ ์ฅ์น๋ ์๋์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค. ํ์ด์ฌ ๊ธฐ๋ฐ ์ค์ผ์คํธ๋ ์ด์ ๋ฐ ์๋ํ๋ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๊ณ , ๋คํธ์ํฌ ์ฌ๋ผ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, 5G๊ฐ ์ฝ์ํ๋ ์ ์ง์ฐ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํต์ฌ ๊ธฐ์ ์ด ๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ๋น์ ์ ์ฌ์ ์ ์ง๊ธ ์์๋ฉ๋๋ค
ํ์ด์ฌ์ ๋ ์ด์ ๋คํธ์ํฌ ์ ๋ฌธ๊ฐ๋ฅผ ์ํ ํ์ ๊ธฐ์ ์ด ์๋๋๋ค. ์ค๋๋ ๊ณผ ๋ฏธ๋์ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ๊ณ ์ด์ํ๊ธฐ ์ํ ๊ทผ๋ณธ์ ์ธ ์ญ๋์ ๋๋ค. ์ด๋ ์์ง๋์ด๊ฐ ์ง๋ฃจํ๊ณ ๋ฐ๋ณต์ ์ธ ์๋ ์์ ์์ ๋ฒ์ด๋ ๋คํธ์ํฌ ์ํคํ ์ฒ, ์ค๊ณ ๋ฐ ์ต์ ํ์ ๊ฐ์ ๋ ๋์ ๊ฐ์น์ ํ๋์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค. ์๋ํ๋ฅผ ์์ฉํจ์ผ๋ก์จ ํต์ ์กฐ์ง์ ๋์งํธ ์ธ๊ณ์ ๋์์์ด ์ฆ๊ฐํ๋ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ ์ ์๋ ๋ณด๋ค ํ๋ ฅ์ ์ด๊ณ ๋ฏผ์ฒฉํ๋ฉฐ ์์ ํ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์๋ํ๋ก์ ์ ํ์ ๋ชฉ์ ์ง๊ฐ ์๋๋ผ ์ฌ์ ์ ๋๋ค. ํต์ฌ์ ์๊ฒ ์์ํ๋ ๊ฒ์ ๋๋ค. ์ผ์์ ์ธ ์์ ์์ ๊ฐ๋จํ๊ณ ๋ฐ๋ณต์ ์ธ ์์ ์ ์๋ณํ๊ณ ์๋ํํด ๋ณด์ญ์์ค. ๊ธฐ์ ๊ณผ ์์ ๊ฐ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋ ๋ณต์กํ ๋ฌธ์ ์ ๋์ ํ ์ ์์ต๋๋ค. ๋คํธ์ํฌ ์๋ํ ์ ๋ฌธ๊ฐ์ ๊ธ๋ก๋ฒ ์ปค๋ฎค๋ํฐ๋ ๋ฐฉ๋ํ๊ณ ์ง์์ ์ ๋๋ค. ํ์ด์ฌ์ ํ๊ณผ ์ปค๋ฎค๋ํฐ์ ์ง๋จ์ ์ง์์ ํ์ฉํจ์ผ๋ก์จ, ๋น์ ์ ๋น์ ์ ์ญํ ์ ์ฌ์ ์ํ๊ณ ํต์ ์ ๋ฏธ๋์ ํต์ฌ ์ค๊ณ์๊ฐ ๋ ์ ์์ต๋๋ค.